DischargeRouting Module

History

current version 2.3 - 2nd December 2024

version date comment
1.0 07/Oct/2016 Original code
1.1 08/Feb/2023 DischargePointInit and DischargePointExport added
1.2 12/Feb/2023 routing parameters are no more stored in stream network. No more need of HydroNetwork module
1.3 25/Jan/2024 module name changed from SurfaceRouting to DischargeRouting
1.4 26/Jan/2024 module adjusted to cope with new module Diversions
1.5 10/Apr/2024 observed reservoir downstream discharge read from file
1.6 11/Apr/2024 observed diverted discharge read from file
1.7 18/Apr/2024 discharge routing parameters assigned for different subbasins
1.8 08/May/2024 Qin written to output instead of Qout, to fix the bug of zero discharge in outlet cell
1.9 06/Jun/2024 log message bug fixed when diversion is outside channel
2.0 14/Jun/2024 back to Qout written to output file. Qout is defined in last downstream cell
2.1 03/Jul/2024 Diverted discharge from diversions included in Qlateral of Muskingum
2.2 04/Sep/2024 pools variable moved to Reservoirs module
2.3 02/Dec/2024 excess of water retained in snow added to Qlateral of Muskingum

License

license: GNU GPL http://www.gnu.org/licenses/

Module Description

Route discharge in river network.

River network includes different elements:

  • hillslope reaches
  • channel reaches
  • reservoirs
  • diversions

The user sets the elements to simulate and their properties with a configuration file like in the following example

export-channel-grid = 0

masks-number = 2 # number of masks to assign channel parameters (at least 1 for the base-mask must exist)

[reservoirs]
  file = ./conf/reservoirs.ini
  dt = 10 # if dt = 0 reservoirs are not solved
  dt-out = 3600 #optional, default = 0

[diversions]
  file = ./conf/diversions.ini
  dt = 0 # 0 = suppresses diversion simulation. otherwise dt is set equals to discharge routing dt
  dt-out = 3600

[discharge-in]
  scalar = 0.0  

[discharge-out]
  scalar = 0.0 

[discharge-lat]
  scalar = 0.0

[base-mask]
  channel-initiation-method = area #area, ask, curvature
  channel-initiation-threshold = 4000000 # ask 600000 m^2 area 3500000
  hillslope-width = 200 #  cross section width (m)
  hillslope-alpha = 45. # slope of trapezoidal section side bank (degree)
  hillslope-ks = 2 #Strickler roughness coefficient m^1/3 s^-1

[mask1]
  file = ./data/subbasin1.asc
  format = esri-ascii
  epsg = 32633
  channel-initiation-method = area #area, ask, curvature
  channel-initiation-threshold = 400000 # ask 600000 m^2 area 3500000
  hillslope-width = 200 #  cross section width (m)
  hillslope-alpha = 45. # slope of trapezoidal section side bank (degree)
  hillslope-ks = 3 #Strickler roughness coefficient m^1/3 s^-1

Table Start
Title: channel properties
Id: base-mask
#threshold indicates the basin area below which values of parameters are applied
Columns:    [count]        [threshold]        [width]   [alpha]         [ks]             
Units:        [-]            [m^2]             [m]      [deg]          [m^1/3s^-1]             
            1            5000000                5         45            20           
            2           10000000                7         45            25               
            3           15000000               10         45            30               
            4           20000000               20         45            35               
            5           30000000               25         45            40           
            6          100000000               35         45            45
            7          500000000               50         45            45
            8         1000000000               65         45            45
            9         2000000000               80         45            45
Table End

Table Start
Title: channel properties
Id: mask1
#threshold indicates the basin area below which values of parameters are applied
Columns:    [count]        [threshold]        [width]   [alpha]         [ks]             
Units:        [-]            [m^2]             [m]      [deg]          [m^1/3s^-1]             
            1            5000000               5          45            15           
            2           10000000               9          45            20               
            3           15000000               20         45            25               
            4           20000000               25         45            30               
            5           30000000               30         45            35           
            6          100000000               35         45            40
            7          500000000               40         45            40
            8         2000000000               45         45            45
Table End         


Variables

Type Visibility Attributes Name Initial
type(grid_real), public :: Pin

inlet discharge at time t-1 (previous)

type(grid_real), public :: Plat

lateral discharge at time t-1 (previous)

type(grid_real), public :: Pout

outlet discharge at time t-1 (previous)

type(grid_real), public :: Qin

inlet discharge at time t (current)

type(grid_real), public :: Qout

outlet discharge at time t (current)

integer(kind=short), public :: dtDischargeRouting
integer(kind=short), public :: dtOutReservoirs
type(grid_real), public :: topWidth

channel top width (m)

type(grid_real), public :: waterDepth

water depth from thalweg (m)

integer(kind=short), private, parameter :: INSTANTANEOUS = 3
integer(kind=short), private, parameter :: MC = 4
integer(kind=short), private, parameter :: MCT = 1
integer(kind=short), private, parameter :: MISSING_DEF_INT = -9999
real(kind=float), private, parameter :: MISSING_DEF_REAL = -9999.9
integer(kind=short), private, parameter :: MUSKINGUM = 2
integer(kind=short), private, parameter :: SLOPES = 0
type(grid_real), private :: bankSlope

river bank slope (degree)

type(grid_integer), private :: channel
type(TableCollection), private :: channelParameters
type(grid_integer), private :: dams

location of reservoirs in raster map

type(grid_integer), private :: divChannels

location of diversions in raster map

integer(kind=short), private :: fileUnitPointDischarge
type(grid_real), private :: manning

Manning roughness (s / m^1/3)

type(grid_real), private :: sectionWidth

river section width (m)

type(ObservationalNetwork), private :: sites
type(ObservationalNetwork), private :: sitesDischarge
type(DateTime), private :: timeDiversionsExport
type(DateTime), private :: timePointExport
type(DateTime), private :: timePoolsExport

Subroutines

public subroutine DischargePointInit(pointfile, path_out, time)

Initialize export of point site data

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: pointfile

file containing coordinate of points

character(len=*), intent(in) :: path_out

path of output folder

type(DateTime), intent(in) :: time

start time

public subroutine DischargeRoute(dt, time, flowdir, runoff, dtrk, riverToGroundwater, groundwaterToRiver, storage)

route discharge in surface network

Arguments

Type IntentOptional Attributes Name
integer(kind=short), intent(in) :: dt

time step [s]

type(DateTime), intent(in) :: time
type(grid_integer), intent(in) :: flowdir

flow direction

type(grid_real), intent(in) :: runoff

net rainfall [m/s]

integer(kind=short), intent(in) :: dtrk

time step for reservoirs

type(grid_real), intent(in) :: riverToGroundwater

discharge from river to groundwater (m3/s)

type(grid_real), intent(in) :: groundwaterToRiver

discharge from groundwater to river (m3/s)

type(grid_real), intent(inout) :: storage

volume stored on channel cell

public subroutine InitDischargeRouting(fileini, time, path_out, flowdirection, domain, storage, netRainfall, dtrk)

Initialize surface routing

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: fileini

name of configuration file

type(DateTime), intent(in) :: time
character(len=*), intent(in) :: path_out

path of output folder

type(grid_integer), intent(in) :: flowdirection
type(grid_integer), intent(in) :: domain
type(grid_real), intent(out) :: storage
type(grid_real), intent(out) :: netRainfall
integer(kind=short), intent(out) :: dtrk

private subroutine DischargePointExport(time)

Export of point site data

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time